package arithmetic1.queue;

/*
    用数组实现队列
 */
public class ArrayAsQueue {
    private int maxSize;    //队列的最大容量
    private int arr[];      //保存数据的数组
    private int head;       //头指针
    private int tail;       //尾指针

    public ArrayAsQueue(int maxSize){
        this.maxSize=maxSize;
        arr=new int[maxSize];
        head=-1;
        tail=-1;
    }

    //判断队列是否已满
    public boolean isFull(){
        if(tail-head==maxSize){
            return true;
        }else {
            return false;
        }
    }

    //判断队列是否为空
    public boolean isEmpty(){
        if(tail-head==0){
            return true;
        }else {
            return false;
        }
    }

    //从尾部添加一个元素
    public void add(int num){
        if(this.isFull()){  //队列已满
            //从对头删除一个元素
            this.remove();
            //从队尾添加一个元素
            tail++;
            arr[tail]=num;
        }else{      //队列未满
            tail++;
            arr[tail]=num;
        }
    }

    //从队头删除一个元素
    public void remove(){
        if(isEmpty()){  //队列为空
            System.out.println("队列为空,删除失败");
        }else {     //不为空
            for(int i=0;i<tail;i++){
                arr[i]=arr[i+1];
            }
            tail--;
        }
    }

    //求队列长度
    public int length(){
        return tail-head;
    }

    //打印队列
    public void pringQueue(){
        if(isEmpty()){
            System.out.println("队列为空");
        }else {
            for(int i=0;i<=tail;i++){
                System.out.print(arr[i]+"\t");
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        ArrayAsQueue queue=new ArrayAsQueue(3);
//        System.out.println(arithmetic1.queue.length());
        queue.add(10);
        queue.add(5);
        queue.add(7);
        queue.add(1);
//        System.out.println(arithmetic1.queue.length());
        queue.pringQueue();
        queue.remove();
        queue.pringQueue();
        System.out.println(queue.length());
    }
}

